home *** CD-ROM | disk | FTP | other *** search
/ Aminet 22 / Aminet 22 (1997)(GTI - Schatztruhe)[!][Dec 1997].iso / Aminet / dev / src / ConfigFileSrc.lha / ConfigFileSrc12 / Library / Funcs / Change.c < prev    next >
Encoding:
Text File  |  1997-10-02  |  4.4 KB  |  176 lines

  1. /*
  2. **        $PROJECT: ConfigFile.library
  3. **        $FILE: Change.c
  4. **        $DESCRIPTION: cf_Change#?() functions
  5. **
  6. **        (C) Copyright 1996-1997 Marcel Karas
  7. **             All Rights Reserved.
  8. */
  9.  
  10. /****** configfile.library/cf_ChangeArgument *********************************
  11. *
  12. *   NAME
  13. *        cf_ChangeArgument -- Changes the name of an argument node.
  14. *
  15. *   SYNOPSIS
  16. *        cf_ChangeArgument(ArgNode,Name);
  17. *                          A0      A1
  18. *
  19. *        VOID cf_ChangeArgument(CFArgument *,STRPTR);
  20. *
  21. *   FUNCTION
  22. *        This function changes the name of an argument node.
  23. *
  24. *   INPUTS
  25. *        ArgNode - The argument node.
  26. *        Name - The new name for the argument node.
  27. *
  28. *   SEE ALSO
  29. *        cf_ChangeGroup(), cf_ChangeItem()
  30. *
  31. ******************************************************************************
  32. *
  33. */
  34.  
  35. LibCall VOID cf_ChangeArgument ( REGA0 iCFArgument * ArgNode , REGA1 STRPTR Name )
  36. {
  37.     APTR    MemPool;
  38.  
  39.     FuncDe(bug("cf_ChangeArgument($%08lx,\"%ls\")\n{\n", ArgNode, Name));
  40.  
  41.     MemPool = ArgNode->GrpNode->Header->MemPool;
  42.  
  43.     if ( ArgNode->ExtFlags & CF_EFLG_EXTERN_STRING )
  44.         DelStr (MemPool, ArgNode->Name);
  45.     else
  46.         ArgNode->ExtFlags    |= CF_EFLG_EXTERN_STRING;
  47.     
  48.     ArgNode->Name = DupStr (MemPool, Name);
  49.  
  50.     ArgNode->GrpNode->Header->Flags |= CF_HFLG_CHANGED;
  51.  
  52.     FuncDe(bug("}\n"));
  53. }
  54.  
  55. /****** configfile.library/cf_ChangeGroup ************************************
  56. *
  57. *   NAME
  58. *        cf_ChangeGroup -- Changes the name of a groupnode.
  59. *
  60. *   SYNOPSIS
  61. *        cf_ChangeGroup(GrpNode,Name);
  62. *                       A0      A1
  63. *
  64. *        VOID cf_ChangeGroup(CFGroup *,STRPTR);
  65. *
  66. *   FUNCTION
  67. *        This function changes the name of a group node.
  68. *
  69. *   INPUTS
  70. *        GrpNode - The group node for add to.
  71. *        Name - The new name for the group node.
  72. *
  73. *   SEE ALSO
  74. *        cf_ChangeArgument(), cf_ChangeItem()
  75. *
  76. ******************************************************************************
  77. *
  78. */
  79.  
  80. LibCall VOID cf_ChangeGroup ( REGA0 iCFGroup * GrpNode , REGA1 STRPTR Name )
  81. {
  82.     APTR    MemPool;
  83.  
  84.     FuncDe(bug("cf_ChangeGroup($%08lx,\"%ls\")\n{\n", GrpNode, Name));
  85.  
  86.     MemPool = GrpNode->Header->MemPool;
  87.  
  88.     if ( GrpNode->ExtFlags & CF_EFLG_EXTERN_STRING )
  89.         DelStr (MemPool, GrpNode->Name);
  90.     else
  91.         GrpNode->ExtFlags    |= CF_EFLG_EXTERN_STRING;
  92.     
  93.     GrpNode->Name = DupStr (MemPool, Name);
  94.  
  95.     GrpNode->Header->Flags |= CF_HFLG_CHANGED;
  96.  
  97.     FuncDe(bug("}\n"));
  98. }
  99.  
  100. /****** configfile.library/cf_ChangeItem *************************************
  101. *
  102. *   NAME
  103. *        cf_ChangeItem -- Changes the contents of an item node.
  104. *
  105. *   SYNOPSIS
  106. *        cf_ChangeItem(ItemNode,Contents,Type,SpecialType);
  107. *                      A0       D0       D1   D2
  108. *
  109. *        VOID cf_ChangeItem(CFItem *,LONG,ULONG,ULONG);
  110. *
  111. *   FUNCTION
  112. *        This function changes the contents of an item node.
  113. *
  114. *   INPUTS
  115. *        ItemNode - The item node for the changes.
  116. *        Contents - The new contents.
  117. *        Type - The new type (see cf_NewItem()).
  118. *        SpecialType - The new special type (see cf_NewItem()).
  119. *
  120. *   EXAMPLE
  121. *        CFArgument * myArgNode;
  122. *        CFItem     * myItemNode;
  123. *
  124. *        ...
  125. *        myItemNode = cf_NewItem (myArgNode, 1234567, CF_ITYP_NUMBER, 0);
  126. *        cf_ChangeItem (myItemNode, TRUE, CF_ITYP_BOOL, CF_STYP_BOOL_OFF);
  127. *        ...
  128. *
  129. *        In the CF file:
  130. *
  131. *        [ExampleGroup]
  132. *        ...
  133. *        ExampleArg=ON
  134. *        ...
  135. *
  136. *   SEE ALSO
  137. *        cf_ChangeArgument(), cf_ChangeGroup(), cf_NewItem()
  138. *
  139. ******************************************************************************
  140. *
  141. */
  142.  
  143. LibCall VOID cf_ChangeItem ( REGA0 iCFItem * ItemNode ,
  144.             REGD0 LONG Contents , REGD1 ULONG Type , REGD2 ULONG SpecialType )
  145. {
  146.     APTR    MemPool;
  147.  
  148.     FuncDe(bug("cf_ChangeItem($%08lx,[$%08lx,%ld],%ld,%ld)\n{\n", ItemNode,
  149.             Contents, Contents, Type, SpecialType));
  150.  
  151.     MemPool = ItemNode->ArgNode->GrpNode->Header->MemPool;
  152.  
  153.     ItemNode->ArgNode->GrpNode->Header->Flags |= CF_HFLG_CHANGED;
  154.  
  155.     if ( ItemNode->ExtFlags & CF_EFLG_EXTERN_STRING )
  156.     {
  157.         DelStr (MemPool, ItemNode->Contents.String);
  158.         ItemNode->ExtFlags &= ~CF_EFLG_EXTERN_STRING;
  159.     }
  160.  
  161.     ItemNode->Type                = Type;
  162.     ItemNode->SpecialType    = SpecialType ? SpecialType : CF_STYP_NUM_DEC;
  163.  
  164.     if ( Type == CF_ITYP_STRING )
  165.     {
  166.         ItemNode->Contents.String = DupStr (MemPool, (STRPTR) Contents);
  167.         ItemNode->ExtFlags |= CF_EFLG_EXTERN_STRING;
  168.     }
  169.     else if ( Type == CF_ITYP_NUMBER )
  170.         ItemNode->Contents.Number    = Contents;
  171.     else if ( Type == CF_ITYP_BOOL )
  172.         ItemNode->Contents.Bool        = Contents ? TRUE : FALSE;
  173.  
  174.     FuncDe(bug("}\n"));
  175. }
  176.